package com.dreamoo.redis;

import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.concurrent.TimeUnit;

/**
 * @author 山顶洞人郑某
 * @className RedisCacheUtil.java 缓存工具类
 * @date 2025 05 07
 */

@Data
@AllArgsConstructor
public class RedisCacheUtil {

    private final StringRedisTemplate stringRedisTemplate;

    public <T> T opsForValue(String key,Class<T> clazz) {

        return JSONUtil.toBean(stringRedisTemplate.opsForValue().get(key), clazz);
    }

    /**
     * 带刷新过期时间的查询字符类型
     * @param s key
     * @param expireTime 过期时间
     * @param timeUnit 时间单位
     * @param clazz 需要转换成的类型
     * @return 缓存数据
     * @param <T> 缓存的实体对象
     */
    public <T> T opsForValue(String s, Long expireTime, TimeUnit timeUnit, Class<T> clazz) {
        String cache = stringRedisTemplate.opsForValue().getAndExpire(s, expireTime, timeUnit);
        return JSONUtil.toBean(cache, clazz);
    }
}
